{"componentChunkName":"component---src-templates-post-jsx","path":"/프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - React/","result":{"data":{"site":{"siteMetadata":{"title":"jigglog","author":"JIGGLYPOP","homepage":"http://jigglog.s3-website.ap-northeast-2.amazonaws.com"}},"post":{"id":"14c99c7a-abf7-5f56-aa95-ac7c7d4d18a0","html":"<blockquote>\n<p>프론트 엔드 면접 질문용 공부 후 정리 자료입니다. 정확하지 않을 수 있으니 꼭 다시 책이나 자료를 참고하여 공부하세요</p>\n</blockquote>\n<h1 id=\"react\" style=\"position:relative;\"><a href=\"#react\" aria-label=\"react permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>React</h1>\n<hr>\n<h2 id=\"1-상태-관리\" style=\"position:relative;\"><a href=\"#1-%EC%83%81%ED%83%9C-%EA%B4%80%EB%A6%AC\" aria-label=\"1 상태 관리 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1) 상태 관리</h2>\n<h4>(1) 상태 관리</h4>\n<ul>\n<li>여러 컴포넌트 간의 데이터 전달과 이벤트 통신을 한곳에서 관리하는 패턴 </li>\n<li>리액트(React): Redux, Mobx, 뷰: Vuex</li>\n</ul>\n<h4>(2) 리액트의 상태관리?</h4>\n<h5>(1) Redux</h5>\n<ul>\n<li>리액트에서 전역의 상태를 관리하기 위해서 사용하는 방법</li>\n<li>컴포넌트간의 상태들을 한 곳에 모아놓고 공유해서 사용하는 방식</li>\n<li>Redux는 사실 다른 곳에서도 많이 쓰이는 기술이었지만, react-redux라는 것이 있어서 react에서 사용하기 편리</li>\n<li>\n<p>react-redux 규칙</p>\n<ul>\n<li>단일 스토어</li>\n<li>읽기 전용 상태 (기존의 객체는 건드리지 않고 새로운 객체를 생성해서 사용)</li>\n<li>리듀서는 순수 함수(파라미터 외의 값에는 의존하지 않아야 함)</li>\n</ul>\n</li>\n<li>\n<p>reduce 만드는 순서</p>\n<ul>\n<li>액션 타입을 정함</li>\n<li>액션 생성 함수를 만듦</li>\n<li>이 액션들을 사용하는 리듀서 함수(초기상태 포함)를 만듦</li>\n<li>index.js에서 스토어를 만들어 provider로 스토어를 props로 전달해줌</li>\n</ul>\n</li>\n<li>프레젠테이셔널 컴포넌트와 컨테이너 컴포넌트</li>\n<li>프레젠테이셔널 컴포넌트와 컨테이너 컴포넌트를 분리하여, 컨테이너 컴포넌트에서 connect함수를 사용해서 mapStateToProps(스토어 안의 상태를 컴포넌트의 props로 넘겨주기 위해 설정하는 함수),</li>\n</ul>\n<p>mapDispatchToProps(액션 생성 함수를 컴포넌트의 Props로 넘겨주기 위해 사용하는 함수) </p>\n<p>이 2가지를 다음과 같이 사용</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">connect(mapStateToProps, mapDispatchToProps)(타깃컴포넌트)</code></pre></div>\n<p>자세한 리덕스 내용은 아래를 참고</p>\n<ul>\n<li>리액트의 상태관리?  Context API, Redux, MobX 등의 상태관리가 있으며, Context API보다 Redux를 사용하는 이유는 대규모 개발에서 유지보수성이나 작업효율을 높이기에는 Redux를 사용하는것이 좋기 때문에 많은 사람들이 Redux를 사용한다. 리액트 16.3이후 버전에서는 그래도 Context API가 개선되어 사용하기 좋아졌다.</li>\n<li></li>\n<li>Redux-saga와 옵저버블에 대해 들어봤는가?</li>\n<li>\n<p>Context-API? : </p>\n<ul>\n<li>리액트에서 전역상태를 관리하기 위한 기능</li>\n</ul>\n</li>\n</ul>\n<h2 id=\"2-클래스--함수형\" style=\"position:relative;\"><a href=\"#2-%ED%81%B4%EB%9E%98%EC%8A%A4--%ED%95%A8%EC%88%98%ED%98%95\" aria-label=\"2 클래스  함수형 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2) 클래스 / 함수형</h2>\n<h4>1) 함수형 컴포넌트</h4>\n<ul>\n<li>함수형 프로그래밍은 <strong>명령형(imperative)</strong> 이 아닌 <strong>선언형(declarative)</strong> 이며 애플리케이션의 상태는 순수 함수를 통해 전달된다. </li>\n<li>애플리케이션의 상태가 일반적으로 공유되고 객체의 메서드와 함께 배치 되는 객체 지향 프로그래밍과는 대조된다.</li>\n<li>함수형은 상태를 저장할 수 없음. 기본적으로 함수는 한번 실행되고 나면 메모리 상에서 사라진다. (가비지 컬렉팅)</li>\n<li>함수형 컴포넌트는 클래스형 컴포넌트보다 선언하기가 좀 더 편하고, 메모리 자원을 덜 사용한다는 장점</li>\n<li>함수형 컴포넌트에서만 사용할 수 있는 hooks는 로직을 state와 분리할 수 있게 해주기 때문에 로직을 재사용할 수 있게 해줌</li>\n<li>hooks 는 클로저 원리를 이용해서 state를 저장</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"language-jsx\"><code class=\"language-jsx\"><span class=\"token keyword\">function</span> <span class=\"token function\">BlackDog</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>name <span class=\"token operator\">=</span> <span class=\"token string\">'흰둥이'</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>\n    name<span class=\"token operator\">:</span> <span class=\"token string\">'검둥이'</span><span class=\"token punctuation\">,</span>\n    <span class=\"token function-variable function\">bark</span><span class=\"token operator\">:</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>name <span class=\"token operator\">+</span> <span class=\"token string\">': 멍멍!'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">const</span> blackDog <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Blackdog</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nblackDog<span class=\"token punctuation\">.</span><span class=\"token function\">bark</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// 검둥이: 멍멍!</span>\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">WhiteDog</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>name <span class=\"token operator\">=</span> <span class=\"token string\">'흰둥이'</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>\n    name<span class=\"token operator\">:</span> <span class=\"token string\">'검둥이'</span><span class=\"token punctuation\">,</span>\n    <span class=\"token function-variable function\">bark</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n      console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>name <span class=\"token operator\">+</span> <span class=\"token string\">': 멍멍!'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">const</span> whiteDog <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Whitedog</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nwhiteDog<span class=\"token punctuation\">.</span><span class=\"token function\">bark</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// 흰둥이: 멍멍!</span></code></pre></div>\n<p>일반 함수는 자신이 종속된 객체를 this로 가리키며, 화살표 함수는 자신이 종속된 인스턴스를 가리킴</p>\n<h5>(1) 장점</h5>\n<ul>\n<li>선언이 간편</li>\n<li>메모리 자원을 덜 사용한다.</li>\n<li>프로젝트 빌드 후 배포할 때 결과물의 파일 크기가 더 작음</li>\n</ul>\n<h5>(2) 단점</h5>\n<ul>\n<li>state 와 라이프사이클 API 사용이 불가능하나 hook을 사용하여 해결</li>\n</ul>\n<h4>2) 클래스형 컴포넌트</h4>\n<ul>\n<li>상태를 저장할 수 있고, React Life Cycle Method 를 사용할 수 있음</li>\n<li>render()함수가 필수적으로 있어야 함</li>\n<li>클래스가 인스턴스를 찍어내면 마치 그 인스턴스는 그 때부터 독자적인 생명체처럼 메모리에 상주하고 있기 때문</li>\n<li>State 와 Action을 분리하기 어렵다는 단점이 있음</li>\n</ul>\n<h5>(1) 장점</h5>\n<ul>\n<li>state및 라이프사이클 기능을 사용할 수 있음</li>\n<li>임의 메서드를 정의할 수 있음</li>\n</ul>\n<h5>(2) 단점</h5>\n<ul>\n<li>함수형 컴포넌트보다 선언이 긺</li>\n<li>메모리 자원을 좀 더 사용</li>\n<li>배포할 때 결과물의 파일 크기가 좀 더 큼</li>\n</ul>\n<h2 id=\"3-라이프사이클-메소드\" style=\"position:relative;\"><a href=\"#3-%EB%9D%BC%EC%9D%B4%ED%94%84%EC%82%AC%EC%9D%B4%ED%81%B4-%EB%A9%94%EC%86%8C%EB%93%9C\" aria-label=\"3 라이프사이클 메소드 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3) 라이프사이클 메소드</h2>\n<p><img src=\"https://i.imgur.com/cNfpEph.png\" alt=\"img\"></p>\n<h4>1) 마운트(mount)</h4>\n<ul>\n<li>constructor</li>\n<li>getDerivedStateFromProps </li>\n<li>render</li>\n<li>componentDidMount </li>\n</ul>\n<h4>2) 업데이트(update)</h4>\n<ul>\n<li>getDerivedStateFromProps</li>\n<li>shouldComponentUpdate </li>\n<li>render</li>\n<li>getSnapshotBeforeUpdate</li>\n<li>componentDidupdate </li>\n</ul>\n<h4>3) 언마운트(unmount)</h4>\n<ul>\n<li>componentWllUnmount</li>\n</ul>\n<h4>4) 사용</h4>\n<ul>\n<li>mount에서 컴포넌트가 만들어질때 componetDidMount에서 비동기처리 같은것을 주로 함</li>\n<li>shouldComponentUpdate에서 업데이트 직전에 랜더링시(상태가변경)에 조건으로 재랜더링을 하냐마냐 결정을 할 수 있음</li>\n<li>componentDidUpdate 업데이트 직후에 호출되는 메소드</li>\n<li>unmount에서 컴포넌트가 소멸된 시점에 타이머나 비동기 API를 제거 하는 곳</li>\n</ul>\n<h2 id=\"5-리액트-훅\" style=\"position:relative;\"><a href=\"#5-%EB%A6%AC%EC%95%A1%ED%8A%B8-%ED%9B%85\" aria-label=\"5 리액트 훅 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5) 리액트 훅</h2>\n<h4>1) 이유</h4>\n<ul>\n<li>컴포넌트에서 상태관련 로직을 사용할 때 레이어 변화 없이 재사용할 수 있게하기 위함</li>\n<li>기존의 라이프사이클 메서드 기반이 아닌 로직 기반으로 나눌 수 있어서 컴포넌트를 함수 단위로 잘게 쪼갤 수 있다는 이점</li>\n</ul>\n<h4>2) useState</h4>\n<ul>\n<li>함수형 컴포넌트에서 가변적인 상태를 지닐 수 있게 해줌. </li>\n<li>함수형 컴포넌트에서 상태를 관리해야 할 때 사용</li>\n<li>state는 원시타입 뿐만 아니라 객체로 사용할 수도 있음</li>\n<li>여러개의 useState를 사용할 수도 있지만 하나의 state에 여러 프로퍼티를 추가해서 두 가지 이상의 상태를 관리할 수도 있음</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">import</span> React<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span> useState <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'react'</span><span class=\"token punctuation\">;</span>\n\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">Example</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// 새로운 state 변수를 선언하고, count라 부르겠습니다.</span>\n  <span class=\"token comment\">// count의 초깃값은 0으로 지정합니다.</span>\n  <span class=\"token keyword\">const</span> <span class=\"token punctuation\">[</span>count<span class=\"token punctuation\">,</span> setCount<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token function\">useState</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n    <span class=\"token operator\">&lt;</span>div<span class=\"token operator\">></span>\n      <span class=\"token operator\">&lt;</span>p<span class=\"token operator\">></span>You clicked <span class=\"token punctuation\">{</span>count<span class=\"token punctuation\">}</span> times<span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>p<span class=\"token operator\">></span>\n      <span class=\"token operator\">&lt;</span>button onClick<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token function\">setCount</span><span class=\"token punctuation\">(</span>count <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span><span class=\"token operator\">></span>\n        Click me\n      <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>button<span class=\"token operator\">></span>\n    <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>div<span class=\"token operator\">></span>\n  <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">import</span> React<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span> useState <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"react\"</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> <span class=\"token string\">\"./styles.css\"</span><span class=\"token punctuation\">;</span>\n\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> <span class=\"token keyword\">function</span> <span class=\"token function\">App</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> <span class=\"token punctuation\">[</span>state<span class=\"token punctuation\">,</span> setState<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token function\">useState</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n    name<span class=\"token operator\">:</span> <span class=\"token string\">\"John\"</span><span class=\"token punctuation\">,</span>\n    id<span class=\"token operator\">:</span> <span class=\"token number\">0</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  \n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n    <span class=\"token operator\">&lt;</span>div className<span class=\"token operator\">=</span><span class=\"token string\">\"App\"</span><span class=\"token operator\">></span>\n      <span class=\"token operator\">&lt;</span>h1<span class=\"token operator\">></span>Hello CodeSandbox<span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>h1<span class=\"token operator\">></span>\n      <span class=\"token operator\">&lt;</span>h2<span class=\"token operator\">></span>Start editing to see some magic happen<span class=\"token operator\">!</span><span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>h2<span class=\"token operator\">></span>\n      <span class=\"token operator\">&lt;</span>h3<span class=\"token operator\">></span>name<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>state<span class=\"token punctuation\">.</span>name<span class=\"token punctuation\">}</span> <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>h3<span class=\"token operator\">></span>\n      <span class=\"token operator\">&lt;</span>h3<span class=\"token operator\">></span>id<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>state<span class=\"token punctuation\">.</span>id<span class=\"token punctuation\">}</span> <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>h3<span class=\"token operator\">></span>\n      <span class=\"token operator\">&lt;</span>button onClick<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token function\">setState</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> <span class=\"token operator\">...</span>state<span class=\"token punctuation\">,</span> id<span class=\"token operator\">:</span> state<span class=\"token punctuation\">.</span>id <span class=\"token operator\">+</span> <span class=\"token number\">1</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span><span class=\"token operator\">></span>\n        Increase\n      <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>button<span class=\"token operator\">></span>\n    <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>div<span class=\"token operator\">></span>\n  <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h4>3) useEffect</h4>\n<ul>\n<li>리액트 컴포넌트가 렌더링 될 때마다 특정 작업을 수행하도록 설정</li>\n<li>클래스형 컴포넌트의 componentDidMount와 componentDidUpdate, componentWillUnmount를 합친 형태</li>\n<li>함수형 컴포넌트에서 사이드 이펙트(side effect)를 수행(데이터 가져오기, 구독 설정, 수동으로 DOM 조작)</li>\n<li>useEffect는 리액트에서 컴포넌트 렌더링 이후 어떠한 일을 수행해야 하는지 말해줌</li>\n<li>우리가 넘긴 함수(effect라고 부름)를 기억했다가, DOM 업데이트 이후 불러온다. </li>\n<li>이렇게 컴포넌트 안에서 불러오게 될 경우 effect를 통해 state나 props에 접근할 수 있게 된다. </li>\n<li>useEffect는 컴포넌트의 첫 번째 렌더링과 그 이후 모든 업데이트에서 수행이 된다.</li>\n<li>만약에 useEffect에 설정한 함수를 매번 업데이트마다 수행시키지 않으려면 어떻게 해야 할까? 업데이트 될 때 실행하지 않으려면 함수의 두 번째 파라미터로 비어 있는 배열을 넣어 주면 된다. </li>\n<li>그리고 만약 특정 값이 업데이트 될 때만 useEffect를 실행하고 싶다면 두 번째 파라미터 배열에 해당 값들을 넣어주면 된다.</li>\n<li>컴포넌트가 언마운트 되기 전이나 업데이트 되기 직전에 어떠한 작업을 수행하고 싶다면 useEffect에서 뒷정리 함수(clean-up)를 반환해 주어야 한다. </li>\n<li>예를 들면 외부 데이터에 구독(subscription) 설정을 해야 하는 경우 메모리 누수가 발생하지 않도록 clean-up을 해 주어야 한다.</li>\n<li>리액트에서 뒷정리를 하는 시점은 컴포넌트가 마운트를 해제하는 시점이다. </li>\n<li>effect는 렌더링이 실행될 때마다 실행되는데, 그렇기 때문에 다음 effect를 실행하기 전에 이전 렌더링에서 파생된 effect를 정리해 주어야 할 필요가 있다.</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">import</span> React<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span> useState<span class=\"token punctuation\">,</span> useEffect <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'react'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">Example</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> <span class=\"token punctuation\">[</span>count<span class=\"token punctuation\">,</span> setCount<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token function\">useState</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token function\">useEffect</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    document<span class=\"token punctuation\">.</span>title <span class=\"token operator\">=</span> <span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">You clicked </span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>count<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\"> times</span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n    <span class=\"token operator\">&lt;</span>div<span class=\"token operator\">></span>\n      <span class=\"token operator\">&lt;</span>p<span class=\"token operator\">></span>You clicked <span class=\"token punctuation\">{</span>count<span class=\"token punctuation\">}</span> times<span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>p<span class=\"token operator\">></span>\n      <span class=\"token operator\">&lt;</span>button onClick<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token function\">setCount</span><span class=\"token punctuation\">(</span>count <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span><span class=\"token operator\">></span>\n        Click me\n      <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>button<span class=\"token operator\">></span>\n    <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>div<span class=\"token operator\">></span>\n  <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token comment\">// 첫 렌더링 때만 useEffect 실행</span>\n<span class=\"token function\">useEffect</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">'마운트 될 때만 실행'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token comment\">// 특정 값(name)이 바뀔 때만 useEffect 실행</span>\n<span class=\"token function\">useEffect</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>name<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\">이 바뀔 때만 실행</span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span>name<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">import</span> React<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span> useState<span class=\"token punctuation\">,</span> useEffect <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'react'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">FriendStatus</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">props</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> <span class=\"token punctuation\">[</span>isOnline<span class=\"token punctuation\">,</span> setIsOnline<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token function\">useState</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">null</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token function\">useEffect</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">function</span> <span class=\"token function\">handleStatusChange</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">status</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token function\">setIsOnline</span><span class=\"token punctuation\">(</span>status<span class=\"token punctuation\">.</span>isOnline<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    ChatAPI<span class=\"token punctuation\">.</span><span class=\"token function\">subscribeToFriendStatus</span><span class=\"token punctuation\">(</span>props<span class=\"token punctuation\">.</span>friend<span class=\"token punctuation\">.</span>id<span class=\"token punctuation\">,</span> handleStatusChange<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">return</span> <span class=\"token keyword\">function</span> <span class=\"token function\">cleanup</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      ChatAPI<span class=\"token punctuation\">.</span><span class=\"token function\">unsubscribeFromFriendStatus</span><span class=\"token punctuation\">(</span>props<span class=\"token punctuation\">.</span>friend<span class=\"token punctuation\">.</span>id<span class=\"token punctuation\">,</span> handleStatusChange<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>isOnline <span class=\"token operator\">===</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token string\">'Loading...'</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token keyword\">return</span> isOnline <span class=\"token operator\">?</span> <span class=\"token string\">'Online'</span> <span class=\"token operator\">:</span> <span class=\"token string\">'Offline'</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h4>4) useReducer</h4>\n<ul>\n<li>useState보다 더 다양한 컴포넌트 상황에 따라 다양한 상태를 다른 값으로 업데이트 해주고 싶을 때 사용</li>\n<li>(state, action) => newState의 형태로 reducer를 받고 dispatch 메서드와 짝의 형태로 state를 반환</li>\n<li>하윗값이 복잡한 정적 로직을 만들거나, 다음 state가 이전 state에 의존적인 경우 보통 useState 대신 useReducer를 사용</li>\n<li>또한 useReducer는 자세한 업데이트를 트리거 하는 컴포넌트의 성능을 최적화 할 수 있는데, 이것은 Callback 대신 dispatch를 전달할 수 있기 때문</li>\n<li>useReducer의 첫 번째 파라미터에는 리듀서 함수를 넣고, 두 번째 파라미터에는 해당 리듀서의 기본값을 넣음</li>\n<li>이 Hook을 사용하면 state값과 dispatch 함수를 받아온다. 여기서 state는 현재 가리키고 있는 상태고, dispatch는 액션을 발생시키는 함수</li>\n<li>dispatch(action)과 같은 형태로 함수 안에 파라미터로 액션 값을 넣어주면 리듀서 함수가 호출되는 구조</li>\n<li>초기화를 조금 지연할 수도 있는데 init 함수를 세 번째 인자로 전달. 이는 reducer 외부에서 초기 state를 계산하는 로직을 추출할 수 있도록 하고 또한 어떤 행동에 대한 대응으로 나중에 state를 재설정하는 데에도 유용</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> <span class=\"token punctuation\">[</span>state<span class=\"token punctuation\">,</span> dispatch<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token function\">useReducer</span><span class=\"token punctuation\">(</span>reducer<span class=\"token punctuation\">,</span> initialArg<span class=\"token punctuation\">,</span> init<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> initialState <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>count<span class=\"token operator\">:</span> <span class=\"token number\">0</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">reducer</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">state<span class=\"token punctuation\">,</span> action</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">switch</span> <span class=\"token punctuation\">(</span>action<span class=\"token punctuation\">.</span>type<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">case</span> <span class=\"token string\">'increment'</span><span class=\"token operator\">:</span>\n      <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>count<span class=\"token operator\">:</span> state<span class=\"token punctuation\">.</span>count <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">case</span> <span class=\"token string\">'decrement'</span><span class=\"token operator\">:</span>\n      <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>count<span class=\"token operator\">:</span> state<span class=\"token punctuation\">.</span>count <span class=\"token operator\">-</span> <span class=\"token number\">1</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">default</span><span class=\"token operator\">:</span>\n      <span class=\"token keyword\">throw</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Error</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">Counter</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> <span class=\"token punctuation\">[</span>state<span class=\"token punctuation\">,</span> dispatch<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token function\">useReducer</span><span class=\"token punctuation\">(</span>reducer<span class=\"token punctuation\">,</span> initialState<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n    <span class=\"token operator\">&lt;</span><span class=\"token operator\">></span>\n      Count<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>state<span class=\"token punctuation\">.</span>count<span class=\"token punctuation\">}</span>\n      <span class=\"token operator\">&lt;</span>button onClick<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token function\">dispatch</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>type<span class=\"token operator\">:</span> <span class=\"token string\">'decrement'</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span><span class=\"token operator\">></span><span class=\"token operator\">-</span><span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>button<span class=\"token operator\">></span>\n      <span class=\"token operator\">&lt;</span>button onClick<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token function\">dispatch</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>type<span class=\"token operator\">:</span> <span class=\"token string\">'increment'</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span><span class=\"token operator\">></span><span class=\"token operator\">+</span><span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>button<span class=\"token operator\">></span>\n    <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span><span class=\"token operator\">></span>\n  <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h4>useMemo</h4>\n<ul>\n<li>함수형 컴포넌트 내부에서 발생하는 연산을 최적화. 메모이제이션 된 값을 반환</li>\n<li>의존성이 변경되었을 때만 메모이제이션 된 값을 다시 계산. 모든 렌더링 시 고비용 계산을 방지하게 해줌</li>\n<li>useMemo로 전달된 함수는 렌더링 중에 실행이 되므로 렌더링 중에 하지 않는 작업은 이 함수 내에서 할 수 없음</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> memoizedValue <span class=\"token operator\">=</span> <span class=\"token function\">useMemo</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token function\">computeExpensiveValue</span><span class=\"token punctuation\">(</span>a<span class=\"token punctuation\">,</span> b<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span>a<span class=\"token punctuation\">,</span> b<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h4>useCallback</h4>\n<ul>\n<li>메모이제이션 된 콜백을 반환</li>\n<li>주로 렌더링 성능을 최적화 해야 하는 상황에서 사용. 이벤트 핸들러 함수를 필요할 때만 생성 가능</li>\n<li>인라인 콜백과 그것의 의존성 값의 배열을 전달하면 useCallback은 콜백의 메모이제이션된 버전을 반환</li>\n<li>그 메모이제이션된 버전은 콜백의 의존성이 변경되었을 때만 변경</li>\n<li>이는 불필요한 렌더링을 방지하기 위해 참조의 동일성에 의존적인 최적화된 자식 컴포넌트에 콜백을 전달할 때 유용</li>\n<li>useMemo와 비슷한 역할을 하고 useCallback은 결국 useMemo로 함수를 반환하는 상황에서 더 편하게 사용할 수 있는 훅</li>\n<li>숫자, 문자열, 객체 처럼 일반 값을 재사용 :  useMemo를 사용, 함수를 재사용 : useCallback을 사용</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> memoizedCallback <span class=\"token operator\">=</span> <span class=\"token function\">useCallback</span><span class=\"token punctuation\">(</span>\n  <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">doSomething</span><span class=\"token punctuation\">(</span>a<span class=\"token punctuation\">,</span> b<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">[</span>a<span class=\"token punctuation\">,</span> b<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h4>useRef</h4>\n<ul>\n<li>함수형 컴포넌트에서 ref를 쉽게 사용할 수 있도록 해줌 </li>\n<li>.current 프로퍼티로 전달된 인자(initialValue)로 초기화된 변경 가능한 ref 객체를 반환</li>\n<li>본질적으로 useRef는 .current 프로퍼티에 변경 가능한 값을 담고 있는 상자와 같음</li>\n<li>만약 리액트에서 ref 객체를 전달한다면 리액트는 모드가 변경될 때 마다 변경된 DOM 노드에 .current 프로퍼티를 설정할 것</li>\n<li>ref 속성을 사용하는 것보다 useRef() 훅을 사용하는게 더 유용한데, 그 이유는 useRef()가 순수 자바스크립트 객체를 생성하기 때문이다. useRef()와 {current: …} 객체를 생성하는 것의 차이점은 useRef는 매번 렌더링을 할 때 동일한 ref 객체를 제공한다는 점</li>\n<li>useRef는 내용이 변경될 때 그것을 알려주지는 않음(.current 프로퍼티를 변형하는 것이 리렌더링을 발생시키지는 않기 때문)</li>\n<li>만약 리액트가 DOM 노드에 ref를 attach 하거나 detach할 때 어떤 코드를 실행하고 싶다면 callback ref를 사용</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> refContainer <span class=\"token operator\">=</span> <span class=\"token function\">useRef</span><span class=\"token punctuation\">(</span>initialValue<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">function</span> <span class=\"token function\">TextInputWithFocusButton</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> inputEl <span class=\"token operator\">=</span> <span class=\"token function\">useRef</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">null</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">const</span> <span class=\"token function-variable function\">onButtonClick</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    inputEl<span class=\"token punctuation\">.</span>current<span class=\"token punctuation\">.</span><span class=\"token function\">focus</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n    <span class=\"token operator\">&lt;</span><span class=\"token operator\">></span>\n      <span class=\"token operator\">&lt;</span>input ref<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>inputEl<span class=\"token punctuation\">}</span> type<span class=\"token operator\">=</span><span class=\"token string\">\"text\"</span> <span class=\"token operator\">/</span><span class=\"token operator\">></span>\n      <span class=\"token operator\">&lt;</span>button onClick<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span>onButtonClick<span class=\"token punctuation\">}</span><span class=\"token operator\">></span>Focus the input<span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>button<span class=\"token operator\">></span>\n    <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span><span class=\"token operator\">></span>\n  <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h4>useContext</h4>\n<ul>\n<li>useContext는 context 객체(React.createContext)를 받아 그 context의 현재 값을 반환</li>\n<li>context의 현재 값은 트리 안에서 이 Hook을 호출하는 컴포넌트의 가장 가까이에 있는 &#x3C;MyContext.Provider>의 value prop에 의해 결정</li>\n<li>컴포넌트에서 가장 가까운 &#x3C;MyContext.Provider>가 갱신되면 useContext는 &#x3C;MyContext.Provider>에게 전달된 가장 가까운 context value를 사용하여 렌더러를 트리거 한다.상위 컴포넌트에서 React.memo나 shouldComponentUpdate를 사용하더라도 useContext를 사용하고 있는 컴포넌트 자체에서부터 다시 렌더링이 된다. 항상 인자는 context 객체 그 자체여야 함</li>\n<li>useContext를 호출한 컴포넌트는 context 값이 변경되는 항상 리렌더링 된다. 따라서 이 비용이 많이 들면 메모이제이션을 통해 최적화를 할 수도 있음</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> value <span class=\"token operator\">=</span> <span class=\"token function\">useContext</span><span class=\"token punctuation\">(</span>MyContext<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>","tableOfContents":"<ul>\n<li>\n<p><a href=\"/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C%20%EA%B0%9C%EB%B0%9C%EC%9E%90%20%EB%A9%B4%EC%A0%91%20%EC%A7%88%EB%AC%B8(%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91)%20%EC%A7%88%EB%AC%B8%20%EC%A0%95%EB%A6%AC%20%EB%AA%A8%EC%9D%8C%20-%20React/#react\">React</a></p>\n<ul>\n<li>\n<p><a href=\"/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C%20%EA%B0%9C%EB%B0%9C%EC%9E%90%20%EB%A9%B4%EC%A0%91%20%EC%A7%88%EB%AC%B8(%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91)%20%EC%A7%88%EB%AC%B8%20%EC%A0%95%EB%A6%AC%20%EB%AA%A8%EC%9D%8C%20-%20React/#1-%EC%83%81%ED%83%9C-%EA%B4%80%EB%A6%AC\">1) 상태 관리</a></p>\n<ul>\n<li>\n<ul>\n<li><a href=\"/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C%20%EA%B0%9C%EB%B0%9C%EC%9E%90%20%EB%A9%B4%EC%A0%91%20%EC%A7%88%EB%AC%B8(%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91)%20%EC%A7%88%EB%AC%B8%20%EC%A0%95%EB%A6%AC%20%EB%AA%A8%EC%9D%8C%20-%20React/#1-%EC%83%81%ED%83%9C-%EA%B4%80%EB%A6%AC-1\">(1) 상태 관리</a></li>\n<li>\n<p><a href=\"/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C%20%EA%B0%9C%EB%B0%9C%EC%9E%90%20%EB%A9%B4%EC%A0%91%20%EC%A7%88%EB%AC%B8(%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91)%20%EC%A7%88%EB%AC%B8%20%EC%A0%95%EB%A6%AC%20%EB%AA%A8%EC%9D%8C%20-%20React/#2-%EB%A6%AC%EC%95%A1%ED%8A%B8%EC%9D%98-%EC%83%81%ED%83%9C%EA%B4%80%EB%A6%AC\">(2) 리액트의 상태관리?</a></p>\n<ul>\n<li><a href=\"/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C%20%EA%B0%9C%EB%B0%9C%EC%9E%90%20%EB%A9%B4%EC%A0%91%20%EC%A7%88%EB%AC%B8(%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91)%20%EC%A7%88%EB%AC%B8%20%EC%A0%95%EB%A6%AC%20%EB%AA%A8%EC%9D%8C%20-%20React/#1-redux\">(1) Redux</a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n<li>\n<p><a href=\"/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C%20%EA%B0%9C%EB%B0%9C%EC%9E%90%20%EB%A9%B4%EC%A0%91%20%EC%A7%88%EB%AC%B8(%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91)%20%EC%A7%88%EB%AC%B8%20%EC%A0%95%EB%A6%AC%20%EB%AA%A8%EC%9D%8C%20-%20React/#2-%ED%81%B4%EB%9E%98%EC%8A%A4--%ED%95%A8%EC%88%98%ED%98%95\">2) 클래스 / 함수형</a></p>\n<ul>\n<li>\n<ul>\n<li>\n<p><a href=\"/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C%20%EA%B0%9C%EB%B0%9C%EC%9E%90%20%EB%A9%B4%EC%A0%91%20%EC%A7%88%EB%AC%B8(%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91)%20%EC%A7%88%EB%AC%B8%20%EC%A0%95%EB%A6%AC%20%EB%AA%A8%EC%9D%8C%20-%20React/#1-%ED%95%A8%EC%88%98%ED%98%95-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8\">1) 함수형 컴포넌트</a></p>\n<ul>\n<li><a href=\"/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C%20%EA%B0%9C%EB%B0%9C%EC%9E%90%20%EB%A9%B4%EC%A0%91%20%EC%A7%88%EB%AC%B8(%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91)%20%EC%A7%88%EB%AC%B8%20%EC%A0%95%EB%A6%AC%20%EB%AA%A8%EC%9D%8C%20-%20React/#1-%EC%9E%A5%EC%A0%90\">(1) 장점</a></li>\n<li><a href=\"/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C%20%EA%B0%9C%EB%B0%9C%EC%9E%90%20%EB%A9%B4%EC%A0%91%20%EC%A7%88%EB%AC%B8(%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91)%20%EC%A7%88%EB%AC%B8%20%EC%A0%95%EB%A6%AC%20%EB%AA%A8%EC%9D%8C%20-%20React/#2-%EB%8B%A8%EC%A0%90\">(2) 단점</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C%20%EA%B0%9C%EB%B0%9C%EC%9E%90%20%EB%A9%B4%EC%A0%91%20%EC%A7%88%EB%AC%B8(%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91)%20%EC%A7%88%EB%AC%B8%20%EC%A0%95%EB%A6%AC%20%EB%AA%A8%EC%9D%8C%20-%20React/#2-%ED%81%B4%EB%9E%98%EC%8A%A4%ED%98%95-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8\">2) 클래스형 컴포넌트</a></p>\n<ul>\n<li><a href=\"/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C%20%EA%B0%9C%EB%B0%9C%EC%9E%90%20%EB%A9%B4%EC%A0%91%20%EC%A7%88%EB%AC%B8(%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91)%20%EC%A7%88%EB%AC%B8%20%EC%A0%95%EB%A6%AC%20%EB%AA%A8%EC%9D%8C%20-%20React/#1-%EC%9E%A5%EC%A0%90-1\">(1) 장점</a></li>\n<li><a href=\"/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C%20%EA%B0%9C%EB%B0%9C%EC%9E%90%20%EB%A9%B4%EC%A0%91%20%EC%A7%88%EB%AC%B8(%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91)%20%EC%A7%88%EB%AC%B8%20%EC%A0%95%EB%A6%AC%20%EB%AA%A8%EC%9D%8C%20-%20React/#2-%EB%8B%A8%EC%A0%90-1\">(2) 단점</a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n<li>\n<p><a href=\"/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C%20%EA%B0%9C%EB%B0%9C%EC%9E%90%20%EB%A9%B4%EC%A0%91%20%EC%A7%88%EB%AC%B8(%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91)%20%EC%A7%88%EB%AC%B8%20%EC%A0%95%EB%A6%AC%20%EB%AA%A8%EC%9D%8C%20-%20React/#3-%EB%9D%BC%EC%9D%B4%ED%94%84%EC%82%AC%EC%9D%B4%ED%81%B4-%EB%A9%94%EC%86%8C%EB%93%9C\">3) 라이프사이클 메소드</a></p>\n<ul>\n<li>\n<ul>\n<li><a href=\"/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C%20%EA%B0%9C%EB%B0%9C%EC%9E%90%20%EB%A9%B4%EC%A0%91%20%EC%A7%88%EB%AC%B8(%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91)%20%EC%A7%88%EB%AC%B8%20%EC%A0%95%EB%A6%AC%20%EB%AA%A8%EC%9D%8C%20-%20React/#1-%EB%A7%88%EC%9A%B4%ED%8A%B8mount\">1) 마운트(mount)</a></li>\n<li><a href=\"/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C%20%EA%B0%9C%EB%B0%9C%EC%9E%90%20%EB%A9%B4%EC%A0%91%20%EC%A7%88%EB%AC%B8(%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91)%20%EC%A7%88%EB%AC%B8%20%EC%A0%95%EB%A6%AC%20%EB%AA%A8%EC%9D%8C%20-%20React/#2-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8update\">2) 업데이트(update)</a></li>\n<li><a href=\"/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C%20%EA%B0%9C%EB%B0%9C%EC%9E%90%20%EB%A9%B4%EC%A0%91%20%EC%A7%88%EB%AC%B8(%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91)%20%EC%A7%88%EB%AC%B8%20%EC%A0%95%EB%A6%AC%20%EB%AA%A8%EC%9D%8C%20-%20React/#3-%EC%96%B8%EB%A7%88%EC%9A%B4%ED%8A%B8unmount\">3) 언마운트(unmount)</a></li>\n<li><a href=\"/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C%20%EA%B0%9C%EB%B0%9C%EC%9E%90%20%EB%A9%B4%EC%A0%91%20%EC%A7%88%EB%AC%B8(%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91)%20%EC%A7%88%EB%AC%B8%20%EC%A0%95%EB%A6%AC%20%EB%AA%A8%EC%9D%8C%20-%20React/#4-%EC%82%AC%EC%9A%A9\">4) 사용</a></li>\n</ul>\n</li>\n</ul>\n</li>\n<li>\n<p><a href=\"/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C%20%EA%B0%9C%EB%B0%9C%EC%9E%90%20%EB%A9%B4%EC%A0%91%20%EC%A7%88%EB%AC%B8(%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91)%20%EC%A7%88%EB%AC%B8%20%EC%A0%95%EB%A6%AC%20%EB%AA%A8%EC%9D%8C%20-%20React/#5-%EB%A6%AC%EC%95%A1%ED%8A%B8-%ED%9B%85\">5) 리액트 훅</a></p>\n<ul>\n<li>\n<ul>\n<li><a href=\"/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C%20%EA%B0%9C%EB%B0%9C%EC%9E%90%20%EB%A9%B4%EC%A0%91%20%EC%A7%88%EB%AC%B8(%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91)%20%EC%A7%88%EB%AC%B8%20%EC%A0%95%EB%A6%AC%20%EB%AA%A8%EC%9D%8C%20-%20React/#1-%EC%9D%B4%EC%9C%A0\">1) 이유</a></li>\n<li><a href=\"/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C%20%EA%B0%9C%EB%B0%9C%EC%9E%90%20%EB%A9%B4%EC%A0%91%20%EC%A7%88%EB%AC%B8(%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91)%20%EC%A7%88%EB%AC%B8%20%EC%A0%95%EB%A6%AC%20%EB%AA%A8%EC%9D%8C%20-%20React/#2-usestate\">2) useState</a></li>\n<li><a href=\"/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C%20%EA%B0%9C%EB%B0%9C%EC%9E%90%20%EB%A9%B4%EC%A0%91%20%EC%A7%88%EB%AC%B8(%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91)%20%EC%A7%88%EB%AC%B8%20%EC%A0%95%EB%A6%AC%20%EB%AA%A8%EC%9D%8C%20-%20React/#3-useeffect\">3) useEffect</a></li>\n<li><a href=\"/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C%20%EA%B0%9C%EB%B0%9C%EC%9E%90%20%EB%A9%B4%EC%A0%91%20%EC%A7%88%EB%AC%B8(%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91)%20%EC%A7%88%EB%AC%B8%20%EC%A0%95%EB%A6%AC%20%EB%AA%A8%EC%9D%8C%20-%20React/#4-usereducer\">4) useReducer</a></li>\n<li><a href=\"/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C%20%EA%B0%9C%EB%B0%9C%EC%9E%90%20%EB%A9%B4%EC%A0%91%20%EC%A7%88%EB%AC%B8(%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91)%20%EC%A7%88%EB%AC%B8%20%EC%A0%95%EB%A6%AC%20%EB%AA%A8%EC%9D%8C%20-%20React/#usememo\">useMemo</a></li>\n<li><a href=\"/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C%20%EA%B0%9C%EB%B0%9C%EC%9E%90%20%EB%A9%B4%EC%A0%91%20%EC%A7%88%EB%AC%B8(%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91)%20%EC%A7%88%EB%AC%B8%20%EC%A0%95%EB%A6%AC%20%EB%AA%A8%EC%9D%8C%20-%20React/#usecallback\">useCallback</a></li>\n<li><a href=\"/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C%20%EA%B0%9C%EB%B0%9C%EC%9E%90%20%EB%A9%B4%EC%A0%91%20%EC%A7%88%EB%AC%B8(%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91)%20%EC%A7%88%EB%AC%B8%20%EC%A0%95%EB%A6%AC%20%EB%AA%A8%EC%9D%8C%20-%20React/#useref\">useRef</a></li>\n<li><a href=\"/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C%20%EA%B0%9C%EB%B0%9C%EC%9E%90%20%EB%A9%B4%EC%A0%91%20%EC%A7%88%EB%AC%B8(%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91)%20%EC%A7%88%EB%AC%B8%20%EC%A0%95%EB%A6%AC%20%EB%AA%A8%EC%9D%8C%20-%20React/#usecontext\">useContext</a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>","frontmatter":{"title":"프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - React","path":"/프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - React/","images":["images/2.jpg"],"category":"기술 면접","tags":["프론트엔드","개발자","면접","기술면접","React"],"date":"2021-04-14T01:00:00.000Z","components":null,"tweets":null,"summary":"프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - React"}},"posts":{"edges":[{"node":{"frontmatter":{"type":"portfolio","title":"MOIJA","images":["moija/images/moija.png","moija/images/moija1.png","moija/images/moija2.png","moija/images/moija3.png","moija/images/moija4.png","moija/images/moija5.png"],"path":"/portfolios/moija/","tags":null,"date":"2022-03-02T00:00:00.000Z","summary":null}}},{"node":{"frontmatter":{"type":"portfolio","title":"VUELOG","images":["vuelog/images/vuelog.png","vuelog/images/vuelog1.png","vuelog/images/vuelog2.png","vuelog/images/vuelog3.png","vuelog/images/vuelog4.png","vuelog/images/vuelog5.png","vuelog/images/vuelog6.png"],"path":"/portfolios/VUELOG/","tags":null,"date":"2022-03-01T00:00:00.000Z","summary":null}}},{"node":{"frontmatter":{"type":"portfolio","title":"DT CENTER","images":["dtcenter/images/dtcenter.png","dtcenter/images/dtcenter1.png","dtcenter/images/dtcenter2.png","dtcenter/images/dtcenter3.png"],"path":"/portfolios/DT CENTER/","tags":null,"date":"2022-02-21T00:00:00.000Z","summary":null}}},{"node":{"frontmatter":{"type":"portfolio","title":"COLORBERRY","images":["ColorBerry/images/colorberry.png","ColorBerry/images/colorberry2.png","ColorBerry/images/colorberry3.png","ColorBerry/images/colorberry4.png","ColorBerry/images/colorberry5.png","ColorBerry/images/colorberry6.png","ColorBerry/images/colorberry7.png","ColorBerry/images/colorberry8.png"],"path":"/portfolios/COLORBERRY/","tags":null,"date":"2022-02-20T00:00:00.000Z","summary":null}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 요약","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 요약/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2021-0417T09:24:00000Z","summary":"[2020] 정보 처리 기사 실기 요약 입니다 정처기 공부를 할 때 활용하세요"}}},{"node":{"frontmatter":{"type":null,"title":"벡엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - node","images":["images/2.jpg"],"path":"/벡엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - node/","tags":["벡엔드","개발자","면접","기술면접","node"],"date":"2021-04-20T01:00:00.000Z","summary":"벡엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - node"}}},{"node":{"frontmatter":{"type":null,"title":"프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - Vue","images":["images/2.jpg"],"path":"/프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - Vue/","tags":["프론트엔드","개발자","면접","기술면접","Vue"],"date":"2021-04-15T01:00:00.000Z","summary":"프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - Vue"}}},{"node":{"frontmatter":{"type":null,"title":"프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - Vue(1)","images":["images/2.jpg"],"path":"/프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - Vue(1)/","tags":["프론트엔드","개발자","면접","기술면접","Vue"],"date":"2021-04-15T01:00:00.000Z","summary":"프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - Vue(1)"}}},{"node":{"frontmatter":{"type":null,"title":"프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - CSS","images":["images/2.jpg"],"path":"/프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - CSS/","tags":["프론트엔드","개발자","면접","기술면접","CSS"],"date":"2021-04-14T01:00:00.000Z","summary":"프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - CSS"}}},{"node":{"frontmatter":{"type":null,"title":"프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - React","images":["images/2.jpg"],"path":"/프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - React/","tags":["프론트엔드","개발자","면접","기술면접","React"],"date":"2021-04-14T01:00:00.000Z","summary":"프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - React"}}},{"node":{"frontmatter":{"type":null,"title":"RxJs 정리","images":["images/2.jpg"],"path":"/RxJs 정리/","tags":["벡엔드","개발자","프론트엔드","기술면접","RxJs"],"date":"2021-04-09T01:00:00.000Z","summary":"RxJs 정리"}}},{"node":{"frontmatter":{"type":null,"title":"벡엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - 기술스택","images":["images/2.jpg"],"path":"/벡엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - 기술스택/","tags":["벡엔드","개발자","면접","기술면접","기술스택"],"date":"2021-04-09T01:00:00.000Z","summary":"벡엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - 기술스택"}}},{"node":{"frontmatter":{"type":null,"title":"벡엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - CS","images":["images/2.jpg"],"path":"/벡엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - cs/","tags":["벡엔드","개발자","면접","기술면접","CS"],"date":"2021-04-08T01:00:00.000Z","summary":"프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - 자바스크립트 파트"}}},{"node":{"frontmatter":{"type":null,"title":"three.js 공부","images":["images/2.jpg"],"path":"/three.js 공부/","tags":["프론트엔드","개발자","면접","기술면접","자바스크립트"],"date":"2021-04-07T01:00:00.000Z","summary":"three.js 공부"}}},{"node":{"frontmatter":{"type":null,"title":"프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - 자바스크립트(1)","images":["images/2.jpg"],"path":"/프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - 자바스크립트(1)/","tags":["프론트엔드","개발자","면접","기술면접","자바스크립트"],"date":"2021-04-07T01:00:00.000Z","summary":"프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - 자바스크립트(1) 파트"}}},{"node":{"frontmatter":{"type":null,"title":"프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - 자바스크립트(2)","images":["images/2.jpg"],"path":"/프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - 자바스크립트(2)/","tags":["프론트엔드","개발자","면접","기술면접","자바스크립트"],"date":"2021-04-07T01:00:00.000Z","summary":"프론트엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - 자바스크립트(2) 파트"}}},{"node":{"frontmatter":{"type":null,"title":"react 공부","images":["images/1.jpg"],"path":"/react 공부/","tags":["react.js","프론트엔드"],"date":"2021-04-05T12:23:00.000Z","summary":"react 공부"}}},{"node":{"frontmatter":{"type":null,"title":"vue 공부 1일차","images":["images/1.jpg"],"path":"/vue공부1일차/","tags":["vue.js","프론트엔드"],"date":"2021-04-04T12:23:00.000Z","summary":"vue 공부 1일차"}}},{"node":{"frontmatter":{"type":null,"title":"vue 공부 1일차","images":["images/1.jpg"],"path":"/vue공부1일차/","tags":["vue.js","프론트엔드"],"date":"2021-04-04T12:23:00.000Z","summary":"vue 공부 1일차"}}},{"node":{"frontmatter":{"type":null,"title":"history api 정리","images":["images/1.jpg"],"path":"/history api 정리/","tags":["네트워크 관리사 2급","자격증","소프트웨어"],"date":"2021-03-03T12:23:00.000Z","summary":"history api 정리"}}},{"node":{"frontmatter":{"type":null,"title":"프로그래머스 데브매칭 고양이 정리","images":["images/1.jpg"],"path":"/프로그래머스 데브매칭 고양이 정리/","tags":["네트워크 관리사 2급","자격증","소프트웨어"],"date":"2021-03-01T12:23:00.000Z","summary":"프로그래머스 데브매칭 고양이 정리입니다."}}},{"node":{"frontmatter":{"type":"portfolio","title":"ANGULOG","images":["angulog/images/angulog.png","angulog/images/angulog2.png","angulog/images/angulog3.png","angulog/images/angulog4.png","angulog/images/angulog5.png","angulog/images/angulog6.png"],"path":"/portfolios/ANGULOG/","tags":null,"date":"2021-02-23T00:00:00.000Z","summary":null}}},{"node":{"frontmatter":{"type":"portfolio","title":"MBTI WORLD","images":["mbtiworld/images/mbtiworld.png","mbtiworld/images/mbtiworld2.png","mbtiworld/images/mbtiworld3.png","mbtiworld/images/mbtiworld4.png","mbtiworld/images/mbtiworld5.png","mbtiworld/images/mbtiworld6.png","mbtiworld/images/mbtiworld7.png","mbtiworld/images/mbtiworld8.png","mbtiworld/images/mbtiworld9.png","mbtiworld/images/mbtiworld10.png"],"path":"/portfolios/MBTI WORLD/","tags":null,"date":"2021-02-19T00:00:00.000Z","summary":null}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 네트워크 관리사 2급 실기 요점 정리 - 리눅스_TCPIP_신경향","images":["images/1.jpg"],"path":"/[2020] 네트워크 관리사 2급 실기 요점 정리 - 리눅스_TCPIP_신경향/","tags":["네트워크 관리사 2급","자격증","소프트웨어"],"date":"2021-01-02T12:01:00.000Z","summary":"[2020] 네트워크 관리사 2급 실기 요점 정리 - 리눅스_TCPIP_신경향입니다."}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 네트워크 관리사 2급 실기 요점 정리 - 라우터","images":["images/1.jpg"],"path":"/[2020] 네트워크 관리사 2급 실기 요점 정리 - 라우터/","tags":["네트워크 관리사 2급","자격증","소프트웨어"],"date":"2021-01-01T12:23:00.000Z","summary":"[2020] 네트워크 관리사 2급 실기 요점 정리 - 라우터입니다."}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 네트워크 관리사 2급 실기 요점 정리 - 정리","images":["images/1.jpg"],"path":"/[2020] 네트워크 관리사 2급 실기 요점 정리 - 정리/","tags":["네트워크 관리사 2급","자격증","소프트웨어"],"date":"2021-01-01T12:23:00.000Z","summary":"[2020] 네트워크 관리사 2급 실기 요점 정리 - 정리입니다."}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 네트워크 관리사 2급 실기 요점 정리 - 윈도우 서버","images":["images/1.jpg"],"path":"/[2020] 네트워크 관리사 2급 실기 요점 정리 - 윈도우 서버/","tags":["네트워크 관리사 2급","자격증","소프트웨어"],"date":"2021-01-01T12:21:00.000Z","summary":"[2020] 네트워크 관리사 2급 실기 요점 정리 - 윈도우 서버입니다."}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 리눅스 마스터 2급 2차 요점 정리","images":["images/1.jpg"],"path":"/[2020] 리눅스 마스터 2급 2차 요점 정리 - 리눅스 일반/","tags":["리눅스 마스터 2급","자격증","소프트웨어"],"date":"2020-12-03T12:21:00.000Z","summary":"[2020] 리눅스 마스터 2급 2차 (1) 리눅스 일반 요점 정리입니다."}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 16-단답형 문제(4)","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 16-단답형 문제(4)/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2020-10-15T09:24:00000Z","summary":"[2020] 정보 처리 기사 실기 16-단답형 문제(4)입니다 정처기 공부를 할 때 활용하세요"}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 15-단답형 문제(3)","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 15-단답형 문제(3)/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2020-10-15T09:22:00000Z","summary":"[2020] 정보 처리 기사 실기 15-단답형 문제(3)입니다 정처기 공부를 할 때 활용하세요"}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 14-단답형 문제(2)","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 14-단답형 문제(2)/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2020-10-15T09:21:00000Z","summary":"[2020] 정보 처리 기사 실기 14-단답형 문제(2)입니다 정처기 공부를 할 때 활용하세요"}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 13-단답형 문제(1)","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 13-단답형 문제(1)/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2020-10-14T16:21:00000Z","summary":"[2020] 정보 처리 기사 실기 13-단답형 문제(1)입니다 정처기 공부를 할 때 활용하세요"}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 12-정보 용어 정리","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 12-정보 용어 정리/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2020-10-14T02:21:00.000Z","summary":"2020 정보 처리 기사 실기 12-정보 용어 정리 요약 입니다. 정처기 공부를 할 때 활용하세요."}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 11-제품 소프트웨어 패키징","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 11-제품 소프트웨어 패키징/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2020-07-17T23:03:00.000Z","summary":"2020 정보 처리 기사 제품 소프트웨어 패키징 입니다. 정처기 공부를 할 때 활용하세요."}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 10-응용 SW 기초 기술 활용(3)","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 10-응용 SW 기초 기술 활용(3)/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2020-07-17T21:03:00.000Z","summary":"2020 정보 처리 기사 응용 SW 기초 기술 활용 입니다. 정처기 공부를 할 때 활용하세요."}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 10-응용 SW 기초 기술 활용(2)","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 10-응용 SW 기초 기술 활용(2)/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2020-07-17T21:02:00.000Z","summary":"2020 정보 처리 기사 응용 SW 기초 기술 활용 입니다. 정처기 공부를 할 때 활용하세요."}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 10-응용 SW 기초 기술 활용(1)","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 10-응용 SW 기초 기술 활용(1)/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2020-07-17T21:01:00.000Z","summary":"2020 정보 처리 기사 응용 SW 기초 기술 활용 입니다. 정처기 공부를 할 때 활용하세요."}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 9-소프트웨어 보안 구축","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 9-소프트웨어 보안 구축/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2020-07-17T19:00:00.000Z","summary":"2020 정보 처리 기사 소프트웨어 보안 구축 입니다. 정처기 공부를 할 때 활용하세요."}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 8-SQL 응용","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 8-SQL 응용/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2020-07-17T12:45:00.000Z","summary":"2020 정보 처리 기사 SQL 응용 요약 입니다. 정처기 공부를 할 때 활용하세요."}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 6-화면 설계","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 6-화면 설계/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2020-07-16T17:00:00.000Z","summary":"2020 정보 처리 기사 화면 설계 요약 입니다. 정처기 공부를 할 때 활용하세요."}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 7-애플리케이션 테스트 관리","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 7-애플리케이션 테스트 관리/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2020-07-16T17:00:00.000Z","summary":"2020 정보 처리 기사 애플리케이션 테스트 관리 요약 입니다. 정처기 공부를 할 때 활용하세요."}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 5-서버 프로그램 구현","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 5-서버 프로그램 구현/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2020-07-16T06:31:00.000Z","summary":"2020 정보 처리 기사 서버 프로그램 구현 요약 입니다. 정처기 공부를 할 때 활용하세요."}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 4-통합 구현","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 4-통합 구현/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2020-07-16T05:31:00.000Z","summary":"2020 정보 처리 기사 통합 구현 요약 입니다. 정처기 공부를 할 때 활용하세요."}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 3-데이터 입출력 구현","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 3-데이터 입출력 구현/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2020-07-15T17:22:00.000Z","summary":"2020 정보 처리 기사 데이터 입출력 구현 요약 입니다. 정처기 공부를 할 때 활용하세요."}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 2-요구 사항 확인","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 2-요구 사항 확인/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2020-07-15T17:21:00.000Z","summary":"2020 정보 처리 기사 요구 사항 확인 요약 입니다. 정처기 공부를 할 때 활용하세요."}}},{"node":{"frontmatter":{"type":null,"title":"[파이썬] itertools 에 대해서 알아보자","images":["images/4.jpg"],"path":"/[파이썬] itertools 에 대해서 알아보자/","tags":["파이썬","itertools","알고리즘"],"date":"2020-07-15T17:00:00.000Z","summary":"파이썬으로 순열, 조합을 빠르게 구해주는 라이브러리"}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 1-프로그래밍 언어 활용(3)","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 1-프로그래밍 언어 활용(3)/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2020-07-11T22:23:00.000Z","summary":"2020 정보 처리 기사 프로그래밍 언어 활용 요약 입니다. 정처기 공부를 할 때 활용하세요."}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 1-프로그래밍 언어 활용(2)","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 1-프로그래밍 언어 활용(2)/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2020-07-11T22:21:00.000Z","summary":"2020 정보 처리 기사 프로그래밍 언어 활용 요약 입니다. 정처기 공부를 할 때 활용하세요."}}},{"node":{"frontmatter":{"type":null,"title":"[2020] 정보 처리 기사 실기 1-프로그래밍 언어 활용(1)","images":["images/1.jpg"],"path":"/[2020] 정보 처리 기사 실기 1-프로그래밍 언어 활용(1)/","tags":["정보처리기사 실기","정보처리기사","정처기"],"date":"2020-07-11T20:21:00.000Z","summary":"2020 정보 처리 기사 프로그래밍 언어 활용 요약 입니다. 정처기 공부를 할 때 활용하세요."}}},{"node":{"frontmatter":{"type":null,"title":"[파이썬] 파이썬을 이용한 이진탐색트리 구현","images":["images/4.jpg"],"path":"/[파이썬] 파이썬을 이용한 이진탐색트리 구현/","tags":["파이썬","알고리즘","이진탐색트리"],"date":"2020-07-06T22:06:00.000Z","summary":"파이썬을 이용한 이진탐색트리 구현"}}},{"node":{"frontmatter":{"type":null,"title":"2020 정보처리기사 필기 요점 정리(5)-프로그래밍 언어 활용(3)","images":["images/2.jpg"],"path":"/2020 정보처리기사 필기 요점 정리(5)-프로그래밍 언어 활용(3)/","tags":["정보처리기사 필기","정보처리기사"],"date":"2020-05-03T01:00:00.000Z","summary":"2020 정보처리기사 필기 요점 정리(5)-프로그래밍 언어 활용(3)"}}},{"node":{"frontmatter":{"type":null,"title":"2020 정보처리기사 필기 요점 정리(5)-프로그래밍 언어 활용(2)(운영체제)","images":["images/2.jpg"],"path":"/2020 정보처리기사 필기 요점 정리(5)-프로그래밍 언어 활용(2)(운영체제)/","tags":["정보처리기사 필기","정보처리기사"],"date":"2020-05-02T01:00:00.000Z","summary":"응용 SW 기초 기술 활용"}}},{"node":{"frontmatter":{"type":null,"title":"2020 정보처리기사 필기 요점 정리(5)-프로그래밍 언어 활용(1)","images":["images/2.jpg"],"path":"/2020 정보처리기사 필기 요점 정리(5)-프로그래밍 언어 활용(1)/","tags":["정보처리기사 필기","정보처리기사"],"date":"2020-05-01T01:00:00.000Z","summary":"2020 정보처리기사 필기 요점 정리(5)-프로그래밍 언어 활용(1)"}}},{"node":{"frontmatter":{"type":null,"title":"2020 정보처리기사 필기 요점 정리(4)-정보시스템 구축 관리(3)","images":["images/2.jpg"],"path":"/2020 정보처리기사 필기 요점 정리(4)-정보시스템 구축 관리(3)/","tags":["정보처리기사 필기","정보처리기사"],"date":"2020-04-03T03:05:00.000Z","summary":"정보시스템 구축 관리"}}},{"node":{"frontmatter":{"type":null,"title":"2020 정보처리기사 필기 요점 정리(4)-정보시스템 구축 관리(2)","images":["images/2.jpg"],"path":"/2020 정보처리기사 필기 요점 정리(4)-정보시스템 구축 관리(2)/","tags":["정보처리기사 필기","정보처리기사"],"date":"2020-04-02T03:05:00.000Z","summary":"2020 정보처리기사 필기 요점 정리(4)-정보시스템 구축 관리(2)"}}},{"node":{"frontmatter":{"type":null,"title":"2020 정보처리기사 필기 요점 정리(4)-정보시스템 구축 관리(1)","images":["images/2.jpg"],"path":"/2020 정보처리기사 필기 요점 정리(4)-정보시스템 구축 관리(1)/","tags":["정보처리기사 필기","정보처리기사"],"date":"2020-04-01T03:05:00.000Z","summary":"2020 정보처리기사 필기 요점 정리(4)-정보시스템 구축 관리(1)"}}},{"node":{"frontmatter":{"type":null,"title":"2020 정보처리기사 필기 요점 정리(3)-소프트웨어 설계(3)","images":["images/2.jpg"],"path":"/2020 정보처리기사 필기 요점 정리(3)-소프트웨어 설계(3)/","tags":["정보처리기사 필기","정보처리기사"],"date":"2020-03-03T02:01:00.000Z","summary":"2020 정보처리기사 필기 요점 정리(3)-소프트웨어 설계(3)"}}},{"node":{"frontmatter":{"type":null,"title":"2020 정보처리기사 필기 요점 정리(3)-소프트웨어 설계(2)","images":["images/2.jpg"],"path":"/2020 정보처리기사 필기 요점 정리(3)-소프트웨어 설계(2)/","tags":["정보처리기사 필기","정보처리기사"],"date":"2020-03-02T02:01:00.000Z","summary":"2020 정보처리기사 필기 요점 정리(3)-소프트웨어 설계(2)"}}},{"node":{"frontmatter":{"type":null,"title":"2020 정보처리기사 필기 요점 정리(3)-소프트웨어 설계(1)","images":["images/2.jpg"],"path":"/2020 정보처리기사 필기 요점 정리(3)-소프트웨어 설계(1)/","tags":["정보처리기사 필기","정보처리기사"],"date":"2020-03-01T02:01:00.000Z","summary":"2020 정보처리기사 필기 요점 정리(3)-소프트웨어 설계(1)"}}},{"node":{"frontmatter":{"type":null,"title":"2020 정보처리기사 필기 요점 정리(2)-소프트웨어 개발(3)","images":["images/2.jpg"],"path":"/2020 정보처리기사 필기 요점 정리(2)-소프트웨어 개발(3)/","tags":["정보처리기사 필기","정보처리기사"],"date":"2020-02-03T05:00:00.000Z","summary":"2020 정보처리기사 필기 요점 정리(2)-소프트웨어 개발(3)"}}},{"node":{"frontmatter":{"type":null,"title":"2020 정보처리기사 필기 요점 정리(2)-소프트웨어 개발(2)","images":["images/2.jpg"],"path":"/2020 정보처리기사 필기 요점 정리(2)-소프트웨어 개발(2)/","tags":["정보처리기사 필기","정보처리기사"],"date":"2020-02-02T05:00:00.000Z","summary":"2020 정보처리기사 필기 요점 정리(2)-소프트웨어 개발(2)"}}},{"node":{"frontmatter":{"type":null,"title":"2020 정보처리기사 필기 요점 정리(2)-소프트웨어 개발(1)","images":["images/2.jpg"],"path":"/2020 정보처리기사 필기 요점 정리(2)-소프트웨어 개발(1)/","tags":["정보처리기사 필기","정보처리기사"],"date":"2020-02-01T05:00:00.000Z","summary":"2020 정보처리기사 필기 요점 정리(2)-소프트웨어 개발(1)"}}},{"node":{"frontmatter":{"type":null,"title":"2020 정보처리기사 필기 요점 정리(1)-데이터베이스 구축(3)","images":["images/2.jpg"],"path":"/2020 정보처리기사 필기 요점 정리(1)-데이터베이스 구축(3)/","tags":["정보처리기사 필기","정보처리기사"],"date":"2020-01-03T05:00:00.000Z","summary":"2020 정보처리기사 필기 요점 정리(1)-데이터베이스 구축(3)"}}},{"node":{"frontmatter":{"type":null,"title":"2020 정보처리기사 필기 요점 정리(1)-데이터베이스 구축(2)","images":["images/2.jpg"],"path":"/2020 정보처리기사 필기 요점 정리(1)-데이터베이스 구축(2)/","tags":["정보처리기사 필기","정보처리기사"],"date":"2020-01-02T05:00:00.000Z","summary":"2020 정보처리기사 필기 요점 정리(1)-데이터베이스 구축(2)"}}},{"node":{"frontmatter":{"type":null,"title":"2020 정보처리기사 필기 요점 정리(1)-데이터베이스 구축(1)","images":["images/2.jpg"],"path":"/2020 정보처리기사 필기 요점 정리(1)-데이터베이스 구축(1)/","tags":["정보처리기사 필기","정보처리기사","필기","데이터베이스 구축"],"date":"2020-01-01T05:00:00.000Z","summary":"2020 정보처리기사 필기 요점 정리(1)-데이터베이스 구축(1)"}}},{"node":{"frontmatter":{"type":"portfolio","title":"CAPTURE BLOG","images":["CaptureBlog/images/capture1.png","CaptureBlog/images/capture2.png","CaptureBlog/images/capture3.png","CaptureBlog/images/capture4.png","CaptureBlog/images/capture5.png","CaptureBlog/images/capture6.png"],"path":"/portfolios/CAPTURE BLOG/","tags":null,"date":"2020-01-01T00:00:00.000Z","summary":null}}},{"node":{"frontmatter":{"type":"portfolio","title":"LANGUAGE TOGETHER","images":["languageTogether/images/languagetogether.png","languageTogether/images/languagetogether2.png","languageTogether/images/languagetogether3.png","languageTogether/images/languagetogether4.png","languageTogether/images/languagetogether5.png","languageTogether/images/languagetogether6.png","languageTogether/images/languagetogether7.png","languageTogether/images/languagetogether8.png","languageTogether/images/languagetogether9.png"],"path":"/portfolios/LANGUAGE TOGETHER/","tags":null,"date":"2018-01-01T00:00:00.000Z","summary":null}}},{"node":{"frontmatter":{"type":"portfolio","title":"MOVIE STAR","images":["moviestar/images/moviestar.png","moviestar/images/moviestar2.png","moviestar/images/moviestar3.png","moviestar/images/moviestar4.png"],"path":"/portfolios/MOVIE STAR/","tags":null,"date":"2018-01-01T00:00:00.000Z","summary":null}}},{"node":{"frontmatter":{"type":"resume","title":"Resume","images":null,"path":"/resume/","tags":null,"date":"2000-01-01T00:00:00.000Z","summary":null}}}]}},"pageContext":{}}}